package com.qzxl.conntext;

import com.healthmarketscience.jackcess.CursorBuilder;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.Table;
import org.apache.log4j.BasicConfigurator;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.logging.Logger;

/**
 * @Authhor:liutongqiang
 * @Date:2021/2/26 17:06
 */
public class ReadAccess {
    //mdb accdb
    //mdb是accdb的早期版本格式，2007以后，使用accdb格式
    /**
     * @param args
     * @throws
     */
    public static Logger logger = Logger.getLogger(String.valueOf(ReadAccess.class));

    public static String dataTime = "";


    public static void main(String[] args) throws IOException, ParseException {
        //使用了日志文件，也可以不用，会有warnning提示，不影响运行
        BasicConfigurator.configure();
        //PropertyConfigurator.configure("log4j.properties");
        logger.info("开始运行");
        //可以分别测试下面的函数的运行情况
        List<Map<String, Object>> accessDataTable = getAccessDataTable("D:/upFiles/Data.mdb");
    }

    /**
     * 读取指定表格
     *
     * @throws IOException
     */

    //程序需要引入3个包
    //一个是jackcess
    //另一个是commons-logging
    //第3个是commons-lang
    //log4j是日志文件，不是必须强制引入的
    public static  List<Map<String,Object>> getAccessDataTable(String path) throws IOException, ParseException {
    //这里的data.accdb是access文件的名称，后缀名支持accdb和mdb。照片列表是access文件中的一个表。accdb就相当于一个数据库，照片列表就相当于数据库中的一个表
        Table table = DatabaseBuilder.open(new File(path)).getTable("record");
        String date = "";
        List<Map<String,Object>> list = new ArrayList<>();
        //String dataTime = "2019/12/11 19:55:19";
        for (Row row : table) {
            date = row.get("日期")+" " + row.get("时间");
            if (dataTime !=""|| !"".equals(dataTime)){
                SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                Date sd1=df.parse(dataTime);
                Date sd2=df.parse(date);
                boolean after = sd1.after(sd2);
                if (after){
                    System.out.println("数据存在");
                    continue;
                }
            }
            //顺序取出表中的字段和值
            //字段名区分大小写，如果不一致会导致取值为null
            Map<String,Object> map = new HashMap<>();
            map.put("empiricalName", row.get("型号")); //
            map.put("experimentNumber",row.get("编号")); //
            map.put("experimentTime",row.get("实验时间"));
            map.put("experimentDate",row.get("实验日期"));
            map.put("riseTime",row.get("上升时间"));    //
            map.put("ascendingStroke",row.get("上升行程")); //
            map.put("brakingTorque",row.get("制动力矩"));   //
            map.put("descentTime",row.get("下降时间"));    //
            map.put("descentStroke",row.get("下降行程"));//
            map.put("InsulationTest",row.get("500V绝缘测试")); //
            map.put("HiPot",row.get("耐压测试")); //
            list.add(map);
        }
        dataTime = date;
        return list;
    }
    /**
     * 删除一条数据
     *
     * @throws IOException
     */
    public static void deleteRec() throws IOException {
        Table table = DatabaseBuilder.open(new File("D:/upFiles/Data.mdb")).getTable("record");
        //我认为这里应该是查找a，foo才对，原文不知道是否笔误了
        Row row = CursorBuilder.findRow(table, Collections.singletonMap("a", "foo"));
        if (row != null) {
            System.out.println("Found row where 'a' == 'foo': " + row);
            table.deleteRow(row);
        } else {
            System.out.println("Could not find row where 'a' == 'foo'");
        }
    }
}
